#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
// int func(int x)
// {
//     int count=0;
//     int num=x;
//     while(x)
//     {
//         if(num%10==2)count++;
//         x/=10;
//         num=x;
//     }
//     return count;
// }
// int gettwo(int l,int r)
// {
//     int count=0;
//     for(int i=l;i<=r;i++)
//     {
//         count+=func(i);  
//     }
//     return count;
// }
// int main()
// {
//   int l,r;
//   cin>>l>>r;
//   cout<<gettwo(l,r)<<endl;
//   return 0;
// }
// unique怎么用
// class Solution {
//     public:
//         vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
//             // sort(nums1.begin(),nums1.end());
//             // sort(nums2.begin(),nums2.end());
//             // vector<int> ret;
//             // int hash[1001]={0};
//             // int left=0,right=0;
//             // while(left<nums1.size()&&right<nums2.size())
//             // {
//             //     if(left<nums1.size()&&nums1[left]<nums2[right])
//             //     {
//             //         left++;
//             //     }
//             //     else if(right<nums2.size()&&nums1[left]>nums2[right])
//             //     {
//             //         right++;
//             //     }
//             //     else if(left<nums1.size()&&right<nums2.size()&&nums1[left]==nums2[right])
//             //     {
//             //         if(hash[nums1[left]]==0)
//             //         {
//             //             ret.push_back(nums1[left]);
//             //             hash[nums1[left]]++;
//             //         }
//             //         left++,right++;
//             //     }
//             // }
//             // //将重复的元素移到容器最后，并返回第一个重复元素的迭代器
//             // auto last=unique(ret.begin(),ret.end());
//             // ret.erase(last,ret.end());
//             // return ret;
//             bool hash[1010]={false};
//             for(auto x:nums1)
//             {
//                 hash[x]=true;
//             }
//             vector<int> ret;
//             for(auto x:nums1)
//             {
//                 if(hash[x])
//                 {
//                     ret.push_back(x);
//                     hash[x]=false;
//                 }
//             }
//             return ret;
//         }
//     };
// int main()
// {
//     vector<int> v1({2,2,2,2,2,2,}),v2({2,2,2,2,2});
//     // for(int i=0;i)
//     vector<int>ret;
//     ret=Solution().intersection(v1,v2);
//     for(int x:ret)cout<<x<<" ";
//     return 0;
// }
//大概率超时，可能和测试样例有关，有的样例不超时
// bool ishuiwen(string s)
// {
//     int left=0,right=s.size()-1;
//     while(left<right)
//     {
//         if(s[left]==s[right])
//         {
//             left++,right--;
//         }
//         else return false;
//     }
//     return true;
// }
// int main()
// {
//     // while(1)
//     // {
//         string s;cin>>s;
//         if(ishuiwen(s))
//         {
//             if(s.size()%2==0)cout<<0;
//             else cout<<s[0];
//             return 0;
//         }
//         for(int i=0;i<s.size();i++)
//         {
//             if(i>0&&s[i]==s[i-1])
//             {
//                 s.erase(s.begin()+i-1,s.begin()+i+1);
//                 if(i>=2)i-=2;
//                 else i=0;
//             }
//         }
//         cout<<s;
//     // }
    
//     return 0;
// }
int main()
{
    string s1,st;
    cin>>s1;
    for(auto ch:s1)
    {
        if(!st.empty()&&st.back()==ch)st.pop_back();
        else st+=ch;
    }
    if(st.empty())cout<<0;
    else cout<<st<<endl;
    return 0;
}